<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->

  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>Infinite Cave Adventure</title>
    <link href="http://fonts.googleapis.com/css?family=PT+Sans" rel="stylesheet" type="text/css" />
    <link rel="stylesheet" href="css/main.css" />
  </head>

  <body>

    <!-- Header -->

    <div class="row">
      <div class="optional-left">
      </div>
      <div class="required-right">
        <ul class="line-list">
          <li><a href="#intro">Intro</a></li>
          <li><a href="#play">Play online</a></li>
          <li><a href="#download">Download</a></li>
          <li><a href="screenshots.html">Screenshots</a></li>
          <li><a href="#highscore">Highscore table</a></li>
          <li><a href="#winning">Winning the game</a></li>
          <li><a href="#news">News</a></li>
        </ul>
      </div>
    </div>
    
    <!-- Main page -->
    
    <div class="row">    

      <!-- Left block -->

      <div class="optional-left">

        <img style="display: block; margin-left: auto; margin-right: auto" 
             src="logo.png" width="158" height="248" alt="Ye Olde Cthulhu" />
        <div style="font-size: 8pt"></div>
        <p><hr/></p>
        
        <ul class="column-list">
          <li><a href="#intro">Intro</a></li>
          <li><a href="#play">Play online</a></li>
          <li><a href="#download">Download</a></li>
          <li><a href="#why">Blurb</a></li>
          <li><a href="screenshots.html">Screenshots</a></li>
          <li><a href="#highscore">Highscore table</a></li>
          <li><a href="#winning">Winning the game</a></li>
          <li><a href="#developer">Developer info</a></li>
          <li><a href="#news">News</a></li>
        </ul>
      
        <p><hr/></p>
        
      </div>

      <!-- Useful content -->
    
      <div class="required-right">

        <div id="intro">

          <h3>Intro</h3>
          <p><em>Infinite Cave Adventure</em> is a <a href="http://roguebasin.roguelikedevelopment.org/index.php?title=What_a_roguelike_is">roguelike</a> game which combines 
            an old-school look-and-feel with original and interesting gameplay choices.</p>
          <p>It is a sequel to <a href="http://code.google.com/p/diggr-roguelike/">"Diggr"</a>.</p>
          <p>Click <a href="screenshots.html">here</a> to see some <a href="screenshots.html">screenshots</a> of the game.
        </div>

        <div id="play">
          <h3>Play online</h3>
          <p>Play the game online with other participants. Connect with a <a href="tiletel.zip">telnet client</a> to:
          <p>Host <span class="label">dungeon.name</span>, port <span class="label">20020</span> for ASCII graphics.</p>
          <p>Host <span class="label">dungeon.name</span>, port <span class="label">20022</span> for Unicode graphics.</p>
          <p>Host <span class="label">dungeon.name</span>, port <span class="label">20028</span> for <a href="square_tiles.html">square tile</a> graphics.</p>
          <p>Host <span class="label">dungeon.name</span>, port <span class="label">22222</span> to watch other people play instead.</p>
        </div>

        <div id="download">
          <h3>Download an offline version</h3>
          <p>(The offline version includes a telnet client for playing online, too, so grab it even if you want to play online.)</p>
          <p><a href="incavead.zip">for Windows</a>  |  <a href="incavead-i386.tar.gz">for Linux 32-bit</a>  |  <a href="incavead-x86_64.tar.gz">for Linux 64-bit</a></p>
        </div>

        <div id="highscore">
          <h3>Highscore table</h3>

          <script id="num_games_tmpl" type="text/html">
            <b>{{num_games}}</b>
          </script>

          <p>Here are the highscore lists from games played on the public server, 
             from a total of <span id="num_games"></span> games logged so far.
          </p>

          <script id="scorelines_tmpl" type="text/html">
            <ol>
              {{#.}}
              <li>
              <span class="success label">{{name}}</span>,
              {{#victory}}
              a glorious victor of
              {{/victory}}
              level {{plev}}. <small>
                {{#victory}}
                Last seen
                {{/victory}}
                {{^victory}}
                Killed
                {{/victory}}
                on dungeon level <b>{{dlev}}</b>{{^victory}} by {{cause}}{{/victory}}.
                Net worth: <b>{{worth}}</b> $ZM.</small>
              {{#rcodes}}
              <small>(Replay codes were used <b>{{rcodes}}</b> times.)</small>
              {{/rcodes}}
              </li>
              {{/.}}
            </ol>
          </script>

          <div class="expander" onclick="$('#panel_plev').toggle();">▶ Glorious victors</div>
          <div class="highscores" id="panel_victors">
          </div>

          <div class="expander" onclick="$('#panel_plev').toggle();">▶ ... by player level</div>
          <div class="highscores" id="panel_plev">
          </div>

          <div class="expander" onclick="$('#panel_dlev_d').toggle();">▶ ... by lowest dungeon level</div>
          <div class="highscores" id="panel_dlev_d">
          </div>

          <div class="expander" onclick="$('#panel_dlev_a').toggle();">▶ ... by highest dungeon level</div>
          <div class="highscores" id="panel_dlev_a">
          </div>

          <div class="expander" onclick="$('#panel_worth').toggle();">▶ ... by net worth</div>
          <div class="highscores" id="panel_worth">
          </div>

          <div class="expander" onclick="$('#panel_ts').toggle();">▶ last 10 games</div>
          <div class="highscores" id="panel_ts">
          </div>

          <script id="stats_tmpl" type="text/html">
            <div>
              Leading cause of death: <b>{{kills_raw.cause}}</b>, with <b>{{kills_raw.kills}}</b> kills.<br/>
              Leading cause of death, weighed for player level: <b>{{kills_plev.cause}}</b>, with <b>{{kills_plev.kills}}</b> kills.<br/>
              Leading cause of death, weighed for player net worth: <b>{{kills_worth.cause}}</b>, with <b>{{kills_worth.kills}}</b> kills.<br/>
              Rarest cause of death: <b>{{kills_rare}}</b>.<br/><br/>
              World GDP: <b>{{gdp.c}}</b> $ZM.<br/>
              Average player level: <b>{{plev.avg}}</b><br/>
              Median player level: <b>{{plev.median}}</b><br/>
              Average dungeon level at time of death: <b>{{dlev.avg}}</b><br/>
              Median dungeon level at time of death: <b>{{dlev.median}}</b><br/><br/>
              Number of unique player names: <b>{{players}}</b><br/>
              Most active player: <b>{{most_active.name}}</b>, with <b>{{most_active.games}}</b> games played.<br/>
              Most active replay code user: <b>{{scummer.name}}</b>, who used a replay code <b>{{scummer.streak}}</b> times.<br/>
              Most achievements achieved: <b>{{most_achievements.name}}</b> with <b>{{most_achievements.number}}</b>.<br/>
              And the <em>Get Rich Quick Award</em> goes to <b>{{got_rich_quick.name}}</b>, who got rich quick with <b>{{got_rich_quick.worth}}</b> $ZM and was killed by <b>{{got_rich_quick.cause}}</b>.<br/><br/>
            </div>
          </script>

          <script id="money_tmpl" type="text/html">
            <div>
              Cash on hold in bank vaults: <b>{{base}}</b> $ZM.<br/>
              <b>{{purchases.cost}}</b> $ZM of purchased items. (<b>{{purchases.num}}</b> purchases 
              of <b>{{purchases.kinds}}</b> different item kinds.)<br/>
              <b>{{accounts.val}}</b> $ZM in <b>{{accounts.num}}</b> bank accounts.
            </div>
          </script>

          <div class="expander" onclick="$('#panel_stats').toggle();">▶ some game statistics</div>
          <div class="highscore popup" id="panel_stats">
          </div>

          <p>(The previous highscore table before it was wiped is <a href="highscore.html?hs=hs-1.json">here</a>.)</p>
          
        </div>

        <div id="why">
          <h3>Blurb</h3>
          <p>Here's what makes this one different:</p>
          <ul>
            <li>'Grinding' is impossible or pointless.</li>
            <li>No experience points, the game advances when you face new challenges, not when you collect kills or equipment.</li>
            <li>A very limited inventory that makes stockpiling impossible. Choosing what gear to keep and what to discard is a major strategic choice in the game.</li>
            <li>A steep 'ramping' of power levels and an aggressive hunger clock makes the game fast-paced.</li>
            <li>Each level is different in flavor in strategy, to make advancing interesting. (You advance by visiting different locales, not by incrementing a number.)</li>
          </ul>
          <p>The idea is to make a roguelike game that is skewed much more towards a board or strategy game than a role-playing game. There's very little role-playing, but a lot of square counting and strategic choice.</p>
        </div>

        <div id="winning">
          <h3>Winning the game</h3>
          <p>Winning the game is deceptively simple: all you need to do is find the Ring of Power and return it to the Astral Throne. However, there are caveats:</p>
          <ul>
            <li>There is one and only one Ring of Power in the game, regardless of the number of concurrent players.</li>
            <li>The Ring of Power will stay where you left it, regardless of when or who is playing.</li>
            <li>When the Ring of Power is in possession of a player, it grows in malignancy. The more malignant is the Ring, the more is affects your player's hunger stat.</li>
            <li>The only way to "reset" the Ring's malignancy is by destroying it; you can destroy it at any time, but destroying the ring will make it impossible to win the game for the next two hours.</li>
            <li>If the ring is destroyed it will regenerate on dungeon level 1 after two hours. The Ring will alse regenerate if it is in possession by a player for more than two hours.</li>
          </ul>
          <p></p>
          <p>The Ring's current status, monitored online:</p>

          <script id="ringstatus_tmpl" type="text/html">
            {{#regenerate}}
            <p><span class="label">Ready to regenerate on dungeon level 1.</span></p>
            {{/regenerate}}
            {{#destroyed}}
            <p><span class="label">Destroyed or in possession since {{ts}}.</span> 
              <span class="label">({{minutes}} minutes left until regeneration.)</span></p>
            {{/destroyed}}
            {{#found}}
            <p><span class="label">Found somewhere on dungeon level {{dlev}} ({{branch}}).</span>
              <span class="label">It has been there since {{ts}}.</span></p>
            {{/found}}
            </span>
          </script>

          <div id="ringstatus"></div>

        </div>

        <div id="developer">
          <h3>Development notes</h3>
          <p>The game is written in pure C++11, for maximum performance and portability. Some highlights:</p>
          <ul>
            <li>Minimal system dependencies. Only a C++11 compiler (tested with gcc) and BSD sockets are required. Should compile and run even on exotic systems.</li>
            <li>Optimized code. The game is developed and tested on slow machines for a smooth playing experience.</li>
            <li>Text-only. Use a telnet client as the interface. (Does not require a GUI!)</li>
            <li>Highly moddable. Most of the game can be changed by editing special plain-text config files.</li>
            <li>Multi-player features out of the box. Install on a public server with minimal hassle.</li>
          </ul>
          <p>The game is open-source. Download the sources from <a href="http://code.google.com/p/incavead">http://code.google.com/p/incavead</a>.</p>
          <p>The source for the included telnet client implementation can be found <a href="http://code.google.com/p/tiletel">here</a>.</p>
        </div>

        <div id="news">
          <h3>News</h3>
          <p><b>2015-02-22</b>:</p><ul>
            <li>Changed dungeon generation: made dungeons more interesting and varied.</li>
            <li>You can now leave permanent messages on the dungeon level. (There's a special item for that.)</li>
            <li>Added options for field-of-view centering and color fading. (Press '=' in game.)</li>
            <li>Added a command for resting in place. (Press 'R'.)</li>
            <li>The game now includes monster descriptions. (Press 'M'.)</li>
            <li>Made some monsters more interesting. (Namely, some monsters can now dig rock or hide underwater.)</li>
          </ul>
          <p><b>2014-10-18</b>:</p><ul>
            <li>Added monster allies. (And completely rewrote the monster AI code in the process.)</li>
            <li>Added ways of getting monster allies. (For example, through necromancy.) You can finally witness epic skellington battles in your terminal window!</li>
            <li>Made the starting surface level more interesting. (And dangerous.)</li>
            <li>Minor balance issues were tweaked.</li>
          </ul>
          <p><b>2014-07-20</b>:</p><ul>
            <li>Added special 'stun' and 'fear' attack types, both against monsters and against the player.</li>
            <li>Split the 'physical' attack type into separate 'cutting' and 'bashing' attack types.</li>
            <li>Changed monsters and items to use the new attack types.</li>
            <li>Added lots of new unique items. They are unlockable based on the player character's horoscope sign. (Look for the 'starsign amulet'.)</li>
            <li>Changed the default 'tiletel' client to use a more low-key color scheme.</li>
            <li>Balance and lots of bug fixes.</li>
          </ul>
          <p><b>2014-06-08</b>:</p><ul>
            <li>Added a complex polymorph mechanic for the player. You can now polymorph into almost any monster, gaining its special abilities and stats.</li>
            <li>Fleshed out (pun intended) Crom's Bloodsports Arena.</li>
            <li>Added human sacrifice.</li>
            <li>Added three new (secret) spells.</li>
            <li>Fixed minor but annoying bugs in the terminal client.</li>
          </ul>
          <p><b>2014-05-26</b>:</p><ul>
            <li>Important crashing bugs were fixed. Please redownload the game, even if you only play online.</li>
            <li>This webpage has been upgraded, with better and more in-depth game stats.</li>
          </ul>
          <p><b>2014-05-18</b>:</p><ul>
            <li><em>Important:</em> fixed crashing bugs in the compression code. Please redownload the game again to enjoy faster online play.</li>
          </ul>
          <p><b>2014-05-17</b>:</p><ul>
            <li>Added a new, content-rich levels with a xenomorph theme.</li>
            <li>Added new paths for winning the game. (Use the xenomorph levels.)</li>
            <li>Compression for online play! 6-10 times less data sent over the network, smoother play and less lag. (Will only work with the bundled 'tiletel' client!)</li>
            <li>Balance and usability fixes. (Most notably: can't wish for some items now.)</li>
            <li>A small easter egg puzzle. (Hello Sokoban.)</li>
          </ul>
          <p><b>2014-04-19</b>:</p><ul>
            <li>Balance, bug fixes.</li>
            <li>Added tax collectors. (Now the only roguelike to not only feature death, but also taxes!)</li>
          </ul>
          <p><b>2014-04-09</b>:</p><ul>
            <li>Added many new items.</li>
            <li>Made item generation much less predictable and more interesting.</li>
            <li>Balance fixes.</li>
            <li>Important bugs squashed.</li>
          </ul>
          <p><b>2014-02-20</b>:</p><ul>
            <li>Added a new level with lots of new content. ('Dwarf Fortress')</li>
            <li>A critical bugfix: in the previous release player karma only went up.</li>
            <li>Refactored monster AI and dungeon lighting a bit.</li>
            <li>Fixed the included tiletel telnet client to handle non-QWERTY keyboard layouts better.</li>
            <li>Other bugfixes.</li>
          </ul>
          <p><b>2014-02-02</b>:</p><ul>
            <li>Turned the Temple of Midas into a full-service store and bank, based on a complex deflationary economy. 
              <ul>
                <li>You can now do four things in a Temple of Midas: purchase protection, as before, deposit to a bank account, withdraw from a bank account, or buy items. (Buying works similar to wishing, except for a price.)</li>
                <li>There is a fixed amount of money in the game. When money is spent or deposited, the amount of money in the game decreases.</li>
                <li>As the money supply deflates, the prices of things become lower. Thus, it is in your interest to hoard money by depositing it in accounts.</li>
                <li>Unfortunately, this means that eventually the markets will crash when there is no more money in the game. When this happens the supply counters are reset. During the crash all bank accounts are wiped, too; be careful.</li>
                <li>As demand for items goes up, so will the price, to compensate for the deflation.</li>
                <li>The Temple will accept gems in lieu of money as payment, but the price of gems will fluctuate similar to the prices for items.</li>
                <li>Your bank accounts are anonymous and are identified by a 3-digit PIN code. If somebody figures out your code they can steal your money; likewise, if you forget your code you won't be able to access your account.</li>
                <li>Different Temples will have different rates, so shop around if you can.</li>
              </ul>
              <li>Made wishing wells much less powerful and not so abusive.</li>
              <li>Shields provided by protection are now limited, regardless of how much you want to spend.</li>
              <li>Money is now buried in graves, not lying next to them. You'll need to dig into a grave to take the money.</li>
              <li>There are now valuable gems laying about freely in the dungeons, but <em>only</em> if you follow the tunnels to other branches.</li>
              <li>Bugfixes, interface improvements and a few more useful items and strategies.</li>
          </ul>
          <p><b>2014-01-26</b>:</p><ul>
            <li>You can now dig down to search for treasure. (But find a dowsing rod first to help you.)</li>
            <li>Defiling graves is also possible now.</li>
            <li>Implemented toggleable color schemes in menus.</li>
            <li>You can now scroll the screen in spectator mode.</li>
            <li>Lots of critical bug- and exploit fixes.</li>
            <li>Reworked the Lune level a bit.</li>
          </ul>

          <p class="expander">
            <b onclick="$('#oldnews').toggle();">[ Click to see older news ]</b>
          </p><div id="oldnews">

          <p><b>2014-01-15</b>:</p><ul>
            <li>Changed replay code mechanics. Using them will now make your game <em>much</em> more difficult.</li>
            <li>Added a new special level: Crom's Bloodsports Arena.</li>
            <li>Added a blindness attack type, with associated special items and monsters.</li>
            <li>Greatly refactored spectator mode. Now with a chat function! (Also it lags much less now.)</li>
            <li>To keep things fair, highscores have been wiped, due to a change in replay code mechanics. See the archived old highscores <a href="highscore.html?hs=hs-1.json">here</a>.</li>
            <li>Bugfixes, of course.</li>
          </ul>
          <p><b>2014-01-05</b>:</p><ul>
            <li>Added an overmap. (Press '#' in-game.)</li>
            <li>Replay code use is now tracked in the highscore table. (Sadly, this is not retroactive; current higscore entries will not show replay code use.)</li>
            <li>Added a spectator mode to watch other people play. (First implementation, please be gentle.)</li> 
            <li>Offline packages now bundle <a href="http://code.google.com/p/tiletel/">a much better telnet client</a>.</li>
            <li>Important bugfixes and usability enhancements.</li>
          </ul>
          <p><b>2013-12-30</b>:</p><ul>
            <li>New gameplay mechanic: wishes.</li>
            <li>Digging tools are now spawned on level 0.</li>
            <li>Digging is now permanent.</li> 
            <li>Your attack and defense stats are now made explicit. (Press '@' in-game.)</li>
            <li>Many new items (especially cave modification items) and balance changes.</li>
            <li>Bugfixes and small usability enhancements.</li>
          </ul>
          <p><b>2013-12-08</b>:</p><ul>
            <li>Added a new gameplay mechanic: <em>achievements</em>. Killing enough of certain types of monsters will trigger special in-game events and will grant you special labels in the highscore list.</li>
            <li>New unique monsters and items. (Related to achievements.)</li>
            <li>A new and never-before-seen <a href="square_tiles.html">square tiles graphics mode</a>!</li>
            <li>Highscore and victory status are now accessible from within the game itself.</li>
            <li>Bugfixes and small usability enhancements.</li>
          </ul>
          <p><b>2013-11-02</b>:</p><ul>
            <li>Added new magic mechanics and new spells.</li>
            <li>The twig is now actually useful. (Under certain specific conditions.)</li>
            <li>Added some Elder Gods. (And new levels.)</li>
            <li>Lots of important bugfixes.</li>
          </ul>
          <p><b>2013-10-22</b>:</p><ul>
            <li>Added a Unicode graphics mode.</li>
            <li>Added a 'Temple of Midas', finally a way to spend all that gold.</li>
            <li>Three new special dungeon levels.</li>
            <li>New spells and magic mechanics.</li>
            <li>Numerous UI improvements, including an in-game tutorial HOWTO.</li>
          </ul>
          <p><b>2013-10-08</b>:</p><ul>
            <li>Downloadable offline versions are now available for Windows and Linux.</li></ul>
          <p><b>2013-10-01</b>:</p><ul>
            <li>Implemented much more informative highscore table.</li></ul>
          <p><b>2013-09-29</b>:</p><ul>
            <li>Added a starting surface level before the 'real' dungeon. This should make the start game significantly easier.</li>
            <li>Added a new gameplay mechanic: <i>luck</i>.</li>
            <li>Added a new dungeon branch: three levels that go <i>up</i> into the heavens from the surface, instead of down into the dungeon. The new levels won't make it easier to win the game, but are instead a source of powerful and rare artifacts.</li></ul>
          <p><b>2013-07-07</b>:</p><ul>
            <li>New multiplayer features have been implemented. You can now make permament changes to the dungeon, which will be visible to other players also. Currently you can make new stairs, add traps and store items for safekeeping.</li></ul>
          <p><b>2013-06-30</b>:</p><ul>
            <li>A victory condition has been impletented! You can now win the game. :)</li></ul>
          <p><b>2013-06-26</b>:</p><ul>
            <li>Significant bugfixes. <em>Sorry, I had to reset the highscore table for technical reasons. :(</em></li></ul>
          <p><b>2013-06-24</b>:</p><ul>
            <li>Lots of new levels, lots of balance fixes! The game now has 15 full, original, filler-free dungeon levels. (Still no victory condition; stay tuned, that's coming soon and will be a surprise, I guarantee.)</li></ul>
          <p><b>2013-06-19</b>:</p><ul>
            <li>Bug and UI fixes.</li></ul>
          <p><b>2013-06-18</b>:</p><ul>
            <li>This webpage is up!</li></ul>
          <p><b>2013-06-18</b>:</p><ul>
            <li>Implemented a (dysfunctional) zorkmid economy.</li></ul>
          <p><b>2013-06-17</b>:</p><ul>
            <li>Dead players will now leave gravestones which can be seen by others playing the game.</li></ul>
          <p><b>2013-06-16</b>:</p><ul>
            <li>Public server is now online!</li></ul> 
          </div>
        </div>

        <script src="/js/jquery.js"></script>
        <script src="/js/mustache.js"></script>
        <script src="/js/highscore.js"></script>

        <script>
          $(document).ready(function () {
             do_highscore();
             do_ringstatus();

             $("#oldnews").toggle();
          });
        </script>

      </div>
    </div>

  </body>
</html>
